/**
 * m1
 */
import M1 from './m1' // 引入 m1模块的 default

// 同时导入default和模块属性
import m1, { yourname } from './m1' // 引入 m1模块的 default和部分属性
import {
    STR as m1STR, // 修改名称
    fn1,
    Class1,
    age
} from './m1'
console.log(m1);
console.log("m1STR", m1STR);
// console.log(STR); // STR未定义
console.log(fn1());
console.log(Class1);
console.log(yourname, age);

/**
 * m2
 */
console.log("m2", m2); // 可以在引入前执行，但是不规范，不推荐
import * as m2 from './m2' // 引入 m2的所有模块(不包含default)，并命名为m2，引入代码会被提前,主要原因是引擎处理import语句是在编译时

/**
 * m3
 */
console.log((1.255).toFixed(2)); // 1.26 || 1.25
// import './m3' // 如果使用 import 语句引入脚本，编译器会将引入代码提前，于是输出两次1.26 // 编译时加载
require('./m3') // 如果使用 require 语句引入脚本，代码会在引入处执行，于是第一次是0.25，第二次是0.26 // 运行时加载
console.log((1.255).toFixed(2)); // 1.26

/**
 * m4模块
 */
import m4, { obj } from './m4'
console.log("m4-default", m4);
console.log("obj", obj);

/**
 * m5 动态引入模块
 * ES6 提案 import()
 * 返回值是Promise
 */
if (~~(Math.random() * 10) > 5) {
    import("./m5-1").then(({ default: theDefault }) => {
        console.log(theDefault);
    });
} else {
    import("./m5-2").then(({ default: theDefault }) => {
        console.log(theDefault);
    });
}